#define _CRT_SECURE_NO_WARNINGS
//#pragma once
//#include<iostream>
//#include<assert.h>
////#include<string.h>
//using namespace std;
//namespace fast
//{
//	class string
//	{
//	public:
//		//string()
//		//	:_str(new char[1])
//		//	,_size(0)
//		//	,_capacity(0)
//		//{
//		//}
//		string(const char* str="")
//		{
//			_size = strlen(str);
//			_str = new char[_size + 1];
//			_capacity = _size;
//			strcpy(_str, str);
//		}
//		~string()
//		{
//			delete[] _str;
//			_str = nullptr;
//			_size = _capacity = 0;
//		}
//		const char* c_str()
//		{
//			return _str;
//		}
//		size_t size()
//		{
//			return _size;
//		}
//		typedef char* iterator;
//		iterator begin()
//		{
//			return _str;
//		}
//		iterator end()
//		{
//			return _str + _size;
//		}
//		char& operator[](size_t pos)
//		{
//			assert(pos >= 0 && pos < _size);
//			return _str[pos];
//		}
//		void push_back(char ch)
//		{
//
//		}
//	private:
//		char* _str;
//		size_t _size;
//		size_t _capacity;
//	};
//	void testString()
//	{
//		//string s1("hello world");
//		//cout << s1.c_str() << endl;
//		////std::string s2;
//		////cout << s2.c_str() << endl;
//		//for (size_t i = 0; i < s1.size(); ++i)
//		//{
//		//	s1[i]++;
//		//}
//		//cout << s1.c_str() << endl;
//		string s1("hello world");
//		string::iterator sit = s1.begin();
//		while (sit != s1.end())
//		{
//			cout << *sit << endl;
//			++sit;
//		}
//
//	}
//}

#include<iostream>
#include<assert.h>
using namespace std;
namespace fast
{
	class string
	{
	public:
		string(const char* str = "")
		{
			_size = strlen(str);
			_capacity = _size;
			_str = new char[_size + 1];
			strcpy(_str, str);
		}
		~string()
		{
			delete[] _str;
			_str = nullptr;
			_size = _capacity = 0;
		}
		const char* c_str()
		{
			return _str;
		}
		size_t size() const
		{
			return _size;
		}
		typedef char* iterator;
		iterator begin()
		{
			return _str;
		}
		iterator end()
		{
			return _str + _size;
		}
		char& operator[](size_t pos)
		{
			assert(pos < _size);
			return _str[pos];
		}
		const char& operator[](size_t pos) const
		{
			assert(pos < _size);
			return _str[pos];
		}
	private:
		char* _str;
		size_t _size;
		size_t _capacity;
	};
	void print_string(const string&s)
	{
		for (size_t i = 0; i < s.size(); ++i)
		{
			cout << s[i] << " ";
		}
		cout << endl;
	}
	void testString()
	{
		//string s1("hello world");
		//cout << s1.c_str() << endl;
		//string::iterator sit = s1.begin();
		//while (sit != s1.end())
		//{
		//	cout << *sit << " ";
		//	++sit;
		//}
		string s1("hello world");
		print_string(s1);
	}
}





